<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //封装优先级队列
        function PriorityQueue() {
            //在PriorityQueue重新创建了一个类：可以理解成内部类
            function PriorityElement(element, priority) {
                this.element = element;
                this.priority = priority;
            }

            //封装属性
            this.items = [];

            //实现插入方法
            PriorityQueue.prototype.enqueue = function (element, priority) {
                //1.创建QueueElement对象
                var queueElement = new PriorityElement(element, priority);

                //2.判断队列是否为空
                if (this.items.length == 0) {
                    this.items.push(queueElement)
                } else {
                    var added = false;
                    for (var i = 0; i < this.items.length; i++) {
                        if (queueElement.priority < this.items[i].priority) {
                            this.items.splice(i, 0, queueElement);
                            added = true;
                            break;
                        }
                    }

                    if (!added) {
                        this.items.push(queueElement);
                    }
                }
            }


            //2.从队列中删除前端元素
            PriorityQueue.prototype.dequeue = function () {
                return this.items.shift();
            }
            //3.查看前端的元素
            PriorityQueue.prototype.front = function () {
                return this.items[0];
            }
            //4.查看队列是否为空
            PriorityQueue.prototype.isEmpty = function () {
                return this.items.length == 0;
            }
            //5.查看队列元素的个数
            PriorityQueue.prototype.size = function () {
                return this.items.length
            }
            //6.toString方法
            PriorityQueue.prototype.toString = function () {
                var resultString = '';
                for (var i = 0; i < this.items.length; i++) {
                    resultString += this.items[i].element + '-' + this.items[i].priority + ' '
                }
                return resultString;
            }
        }

        //测试代码
        var pq = new PriorityQueue();

        //enqueue方法
        pq.enqueue('abc', 111);
        pq.enqueue('cba', 200);
        pq.enqueue('nba', 50);
        alert(pq);

    </script>
</body>

</html>